package com.yugao.fintech.antelope.pay.common.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.yugao.fintech.antelope.pay.model.entity.PayOrder;
import com.yugao.fintech.antelope.pay.model.rqrs.PayOrderQL;
import com.yugao.fintech.antelope.pay.model.rqrs.pay.payorder.PayOrderRS;
import com.yugao.fintech.antelope.pay.payment.model.rqrs.ChannelRetMsgExt;


public interface PayOrderService extends IService<PayOrder> {

    /**
     * 更新订单状态 订单生成 --> 支付中
     */
    boolean updateInit2Ing(String payOrderNo, PayOrder payOrder);

    /**
     * 更新订单状态  支付中 --> 支付成功
     */
    boolean updateIng2Success(String payOrderNo, ChannelRetMsgExt channelRetMsgExt);

    /**
     * 更新订单状态 支付中 --> 订单关闭
     */
    boolean updateIng2Close(String payOrderNo);

    /**
     * 更新订单状态 待支付 --> 订单关闭
     */
    void updateInit2Close(String payOrderNo);

    /**
     * 更新订单状态  支付中 --> 支付失败
     */
    boolean updateIng2Fail(String payOrderNo, ChannelRetMsgExt channelRetMsgExt);

    /**
     * 更新订单状态  支付中 --> 支付成功/支付失败
     */
    boolean updateIng2SuccessOrFail(String payOrderNo, String updateState, ChannelRetMsgExt channelRetMsgExt);


    /**
     * 分页查询 产品订单
     *
     * @return 返回分页数据
     */
    IPage<PayOrderRS> pagePayOrder(PayOrderQL req);

    /**
     * 根据主键查询 产品订单
     *
     * @param id 主键
     * @return 返回记录，没有返回null
     */
    PayOrderRS getPayOrderById(Long id);

    PayOrder getByPayOrderNo(String payOrderNo);

    /**
     * 获取商户订单
     *
     * @param mchNo      商户号
     * @param payOrderNo 支付平台订单号
     * @param mchOrderNo 商户订单号
     */
    PayOrder getMchOrder(String mchNo, String payOrderNo, String mchOrderNo);

    /**
     * 获取支付订单号
     * @param mchNo 商户号
     * @param payOrderNo 支付订单号
     * @param mchOrderNo 商户订单号
     * @return
     */
    String getPayOrderNo(String mchNo, String payOrderNo, String mchOrderNo);

    /**
     * 更新订单 通知状态 --> 已发送
     */
    boolean updateNotifySent(String payOrderNo);
}
